package com.base.starter.config.shiro.jwt;

import com.base.domain.moudles.entity.User;
import org.apache.shiro.authc.ExpiredCredentialsException;

import javax.servlet.http.HttpServletRequest;

/**
 * @author zhou minghao
 * @date 2024/4/23
 * @description
 */
public interface TokenService {

    /**
     * 校验token
     * 1.用户登录 用jwt生成没有有效期的token token的有效期在redis控制，token为空 value为有效时间
     * 2.查看redis 有没有token 没有则证明用户没登录或者长期不活跃自动退出，则需要重新登录
     * 3.redis存在token 解析token 获取username 验证用户存不存在 不存在则删除token，重新登录
     * 4.redis存在token 获取token的value即token的有效时间 有效时间-过期时间 <= 失效时间 则抛出刷新异常 通过调用刷新token接口 刷新token的有效时间
     *
     * @param token 凭证
     * @return 用户信息
     */
    User verificationToken(String token);


    /**
     * 获取token
     *
     * @param httpRequest 请求内容
     * @return 凭证
     */
    String getToken(HttpServletRequest httpRequest);

    /**
     * 获取token
     * @param token token
     * @return
     */
    String getToken(String token);


    /**
     * 删除token
     *
     * @param token 凭证
     */
    void removeToken(String token);

    /**
     * 刷新token
     *
     * @param token 凭证
     * @return 新的凭证
     * @throws ExpiredCredentialsException 凭证过期异常
     */
    String refreshToken(String token);




}
